/*
//##############################################################################
// AUTORES: Cesar Luis           Carné: 12539
// SECCIÓN: 40
// FECHA: 05/11/2013
// NOMBRE DEL ARCHIVO: Driver.java
// DESCRIPCIÓN: Manejo del grafo.
//##############################################################################
 */
package principal;

import java.io.*;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Driver {
    public static void main(String[] args) {
        // TODO code application logic here        
        int cont=0;
        String[] arreglo = null;
        Grafo myGraph= new Grafo();
        try{
            // Cargado del Archivo            
            String directorioActual = System.getProperty("user.dir");
            System.out.println(directorioActual);
            FileInputStream fstream = new FileInputStream(directorioActual + "\\src\\principal\\grafo.txt");
            DataInputStream entrada = new DataInputStream(fstream);
            BufferedReader buffer = new BufferedReader(new InputStreamReader(entrada));
            
            // Lectura del archivo linea por linea
            String infoLine;
            infoLine = buffer.readLine();
            arreglo = infoLine.split("-");
            myGraph.addVertex(arreglo[0]);
            while ((infoLine = buffer.readLine()) != null)   {
                arreglo = infoLine.split("-");
                // Agregamos los vértices y luego el peso entre ambos
                myGraph.addVertex(arreglo[0]);
                if (myGraph.existVertex(arreglo[0]) != -1){
                    myGraph.addVertex(arreglo[0]);
                    System.out.println("Agregando a " + arreglo[0]);
                }
                if (myGraph.existVertex(arreglo[1]) != -1)
                    myGraph.addVertex(arreglo[1]);
                myGraph.addRelation(arreglo[0], arreglo[1], Integer.parseInt(arreglo[2]));
            }
            // Cerramos el archivo
            entrada.close();            
        }
        // Captura de excepciones
        catch (Exception e){
            System.err.println("Ocurrio un error: " + e.getMessage());
            System.exit(0);
        }
        int opc = 1;
        Scanner scan = new Scanner(System.in);
        System.out.println(myGraph.getGrafo());
        while(opc!=5){            
            /* Impresión del menú */
            System.out.println("1. Conocer la ruta más corta entre dos ciudades");
            System.out.println("2. Conocer el centro del grafo");
            System.out.println("3. Modificar el grafo");
            System.out.println("4. Mostrar todas las rutas");
            System.out.println("5. Salir");
            
            // Leer opción
            opc = scan.nextInt();
            
            switch(opc){
                case 1:/*
                    System.out.print("Ciudad de origen: ");
                    scan.nextLine();
                    String origen3 = scan.nextLine();
                    System.out.print("Ciudad destino: ");
                    String destino3 = scan.nextLine();*/
                    //System.out.println(grafo.getRecorrido(origen3, destino3));
                    System.out.println(myGraph.floyd());
                    
                    break;
                case 2:
                    //System.out.println(grafo.getCenter());
                    break;
                case 3:
                    int opc2 = 0;
                    while(opc2!=3){                        
                        System.out.println("\t1. Crear interrupcion entre dos ciudades\n\t2. Crear conexión entre dos ciudades\n\t3. Cancelar");
                        opc2 = scan.nextInt();
                        switch(opc2){
                            case 1:
                                System.out.println("Ciudad de origen: ");
                                scan.nextLine();
                                String origen = scan.nextLine();
                                System.out.println("Ciudad destino: ");
                                String destino = scan.nextLine();
                                /*
                                if(!grafo.removeEdge(origen, destino)){
                                    System.out.println("No se pudo crear dicha interrupcion");
                                }else{
                                    System.out.println("Se creo exitosamente");
                                }*/
                                
                                break;
                            case 2:
                                
                                System.out.println("Ciudad de origen: ");
                                scan.nextLine();
                                String origen2 = scan.nextLine();
                                System.out.println("Ciudad destino: ");
                                String destino2 = scan.nextLine();
                                System.out.println("Distancia entre ambas ciudades: ");
                                double peso = scan.nextDouble();
                                /*
                                try {
                                    grafo.addEdge(origen2, destino2, peso);
                                    System.out.println("Se creo exitosamente");
                                } catch (Exception ex) {
                                    System.out.println("No se puedo crear dicha conexion");
                                }*/
                                break;
                            case 3:
                                break;
                            default:
                                System.out.println("opcion incorrecta!!");
                        }
                    }
                    break;
                case 4:
                    //grafo.imprimirMatriz();
                    break;
                case 5:
                    System.out.println("Gracias por utilizar el programa");
                    break;
                default:
                    System.out.println("opcion incorrecta!!");
            }            

        }
    }
}
